<?php
// 编码声明
header("Content-Type:text/html;charset=utf-8");

//引入函数库
require_once("helpers.php");

//定义一个读取的路径
// __FILE__ 读取当前文件的绝对路径
// dirname 函数 返回路径中文件夹的结构部分
//判断是否有接收到get的参数
// isset() 判断是否有没有这个变量
//如果有就拿，如果没有就为空字符串
//全局变量
$path = isset($_GET['path']) ? trim($_GET['path']) : '';
$action = isset($_GET['action']) ? trim($_GET['action']) : '';


//empty 判断是否为空 为空返回true 否则false
//如果为空， 就默认读取 我们所给的默认目录
if(empty($path))
{
    $path = str_ireplace("\\", "/", dirname(__FILE__))."/demo";
   
    // $path1 = str_ireplace("\\", "/", (__FILE__))."/demo";

}

//分类存放的两个变量
$dirs = $files = [];

//读取该路径下的文件结构，并返回一个数组结构
$list = scandir($path);


// var_dump($list);
// exit; //打断点

//循环遍历文件结构
foreach($list as $item)
{
    // var_dump($item);
    if($item == "." || $item == "..") continue;

    // 组装完整路径
    $cur = $path.'/'.$item;

    //打印调试一下
    // echo $cur."<br />";

    //判断是否是文件夹
    // var_dump(is_dir($cur));

    if(is_dir($cur)) //是文件夹
    {
        $dirs[] = [
            'name' => $item,
            'type' => '文件夹',
            'size' => DirSize($cur),
            'ctime' => date("Y-m-d H:i", filectime($cur))
        ];
    }

    if(is_file($cur)) //是文件
    {
        $files[] = [
            'name' => $item,
            'type' => pathinfo($cur, PATHINFO_EXTENSION),
            'size' => SizeUnit(filesize($cur)),
            'ctime' => date("Y-m-d H:i", filectime($cur))
        ];
    }
}

//接收创建文件夹的参数
if($action == "AddDir")
{
    //接收新的文件夹名称
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //为空判断
    if(empty($dirname))
    {
        //提醒
        notice('文件夹名称不能为空');
        exit;
    }

    //组装完整的文件名称
    $dirname = $path.'/'.$dirname;

    //判断文件夹是否存在
    if(is_dir($dirname))
    {
        notice('文件夹已创建');
        exit;
    }
    
    //创建文件夹
    $res = @mkdir($dirname, 0777, true);

    if($res)
    {
        notice('文件夹创建成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('文件夹创建失败');
        exit;
    }
}

//判断是否是重命名文件夹
if($action == "EditDir")
{
    //接收传递过来的参数
    $old = isset($_GET['old']) ? trim($_GET['old']) : '';
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //判断是否为空
    if(empty($old))
    {
        notice('旧的文件夹名称不能为空');
        exit;
    }

    if(empty($dirname))
    {
        notice('新的文件夹名称不能为空');
        exit;
    }

    if(!is_dir($old))
    {
        notice('旧的文件夹不存在');
        exit;
    }

    //判断新的文件夹名称是否已经存在了
    $dirname = $path.'/'.$dirname;
    if(is_dir($dirname))
    {
        notice('新文件夹已经存在了');
        exit;
    }

    //可以改动文件夹名称
    $res = rename($old, $dirname);

    if($res)
    {
        notice('重命名文件夹成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('重命名文件夹失败');
        exit;
    }
}

//判断是否是删除文件夹
if($action == "DelDir")
{
    //接收参数
    $del = isset($_GET['del']) ? trim($_GET['del']) : '';

    //判断是否为空
    if(empty($del))
    {
        notice('删除的文件夹路径为空');
        exit;
    }

    //判断文件夹是否存在
    if(!is_dir($del))
    {
        notice('文件夹不存在');
        exit;
    }

    //即将删除文件夹 只能够删除为空的文件夹
    $res = @rmdir($del);

    if($res)
    {
        notice('删除文件夹成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('删除文件夹失败');
        exit;
    }
}
//创建文件 要明白一件事情 获取文件url 和后缀
// var_dump(trim($_GET['dirname']));
// exit;



if($action == "AddFile")
{
    var_dump(1);
    //接收新的文件名称
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //为空判断
    if(empty($dirname))
    {
        //提醒
        notice('文件名称不能为空');
        exit;
    }

    //组装完整的文件名称
    $filename = $path.'/'.$dirname;

    //判断文件是否存在
    if(is_file($filename))
    {
        notice('文件夹已创建');
        exit;
    }
    
    //创建文件
    $res = file_put_contents($filename,true);

    if($res)
    {
        notice('文件创建成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('文件创建失败');
        exit;
    }
}
//修改文件
if($action == "EditFile")
{
    //接收传递过来的参数
    $old = isset($_GET['old']) ? trim($_GET['old']) : '';
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //判断是否为空
    if(empty($old))
    {
        notice('旧的文件名称不能为空');
        exit;
    }

    if(empty($dirname))
    {
        notice('新的文件名称不能为空');
        exit;
    }

    if(!is_file($old))
    {
        notice('旧的文件不存在');
        exit;
    }

    //判断新的文件夹名称是否已经存在了
    $filename = $path.'/'.$dirname;
    if(is_file($filename))
    {
        notice('新文件已经存在了');
        exit;
    }

    //可以改动文件夹名称
    $res = rename($old, $filename);

    if($res)
    {
        notice('重命名文件成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('重命名文件失败');
        exit;
    }
}

// 删除文件
if($action == "DelFile")
{
    //接收参数
    $del = isset($_GET['del']) ? trim($_GET['del']) : '';

    //判断是否为空
    if(empty($del))
    {
        notice('删除的文件夹路径为空');
        exit;
    }

    //判断文件夹是否存在
    if(!is_file($del))
    {
        notice('文件夹不存在');
        exit;
    }

    //即将删除文件夹 只能够删除为空的文件夹
    $res = @unlink($del);
    if($res)
    {
        notice('删除文件成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('删除文件失败');
        exit;
    }
}
//强制删除文件
if($action == "DelAll"){
    // 接受删除文件的目录
    $dir = isset($_GET['dir'])? trim($_GET['dir']) :"";
    //判断是否为空
    if(empty($dir)){
        notice("文件为空");
        exit;
    }
    if(!is_dir($dir)){
        notice("目录不存在");
        exit;
    }
    // 接受前端返回的参数 并且调用回调函数
    if(DelDir($dir)){
        // loccation.href 返回值
        notice("删除成功!","index.php?path=$path");
        exit;
    }else{
        notice("删除失败!");
        exit;
    }

}

//上传单个文件
//文件上传专用的判断 是不是文件
if($_FILES){
   
    // 如果文件存在并且大小大于0的话
    if(isset($_FILES['photo'])&&$_FILES['photo']['size']>0)
   {
         $res = UploadFile('photo',$path);
         if($res['result']){
            //刷新跳转 千万不要使用单引号 
            notice($res['msg'],"index.php?path=$path");
            exit;
         }
         else{
            notice($success['msg']);
            exit;
         }
   }
}


// 判断是不是post请求
// if($_POST['photo']){

// }
//复选框批量删除

$list = isset($_POST['list'])? ($_POST['list']) :"";
    if(!empty($list)){      
        FileDeleteAll($list);
        notice("删除成功","index.php?=$path=$path");
    }
    SizeUnit(filesize($cur));

// DirSize($path);


//上传多文件
if(isset($_FILES['list'])){
    // 如果文件存在并且大小大于0的话
    if($_FILES['list']['size']>0&&count($_FILES['list']['name'])>=1){
        // var_dump($_FILES['list']);
        // exit;
            // var_dump($v);
            // exit;
            $res = UploadFiles('list',$path);
            if($res['result']){
                //刷新跳转 千万不要使用单引号 
                notice($res['msg'],"index.php?path=$path");
                exit;
            }
            else{
                notice($success['msg']);
                exit;
            }
        
    }
   }

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FileSystem</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

        table{
            width:80%;
            margin:5em auto 0em;
        }

        td,th{
            font-size:1.5em;
            height:45px;
            text-align: center;
            transition: all linear .3s;
        }

        th{
            font-weight: bold;
            font-size:1.7em;
        }

        td:hover, th:hover{
            background:yellow;
        }
    </style>
</head>
<body>
    <form method="post" enctype="multipart/form-data">
    <table border="1px" cellpadding="0" cellspacing="0">
        <tr>
            <th width="50px"><input type="checkbox" id="cek"/></th>
            <th>文件名</th>
            <th>文件类型</th>
            <th>文件大小</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
        
        <!-- 文件夹 -->
        <?php foreach($dirs as $item){?>
        <tr>
            <td><input type="checkbox" name = "list[]" value="<?php echo $path.'/'.$item['name'];?>" /></td>
            <td><a href="index.php?path=<?php echo $path.'/'.$item['name'];?>"><?php echo $item['name'];?></a></td>
            <td><?php echo $item['type'];?></td>
            <td><?php echo $item['size'];?></td>
            <td><?php echo $item['ctime'];?></td>
            <td>
                <a href="javascript:void(0)" data-old="<?php echo $path.'/'.$item['name'];?>" onclick="EditDir(this)">重命名</a>
                <a href="javascript:void(0)" data-del="<?php echo $path.'/'.$item['name'];?>" onclick="DelDir(this)">删除</a>
                <a href="javascript:void(0)" data-dir="<?php echo $path.'/'.$item['name'];?>" onclick="DelAll(this)">强制删除</a>
            </td>
        </tr>
        <?php } ?>

        <!-- 文件 -->
        <?php foreach($files as $item){?>
        <tr>
            <td><input type="checkbox" name = "list[]" value="<?php echo $path.'/'.$item['name'];?>" /></td>
            <td><?php echo $item['name'];?></td>
            <td><?php echo $item['type'];?></td>
            <td><?php echo $item['size'];?></td>
            <td><?php echo $item['ctime'];?></td>
            <td>
                <a href="javascript:void(0)">编辑</a>
                <a href="javascript:void(0)" data-old="<?php echo $path.'/'.$item['name'];?>" onclick="EditFile(this)">重命名</a>
                <a href="javascript:void(0)" data-del="<?php echo $path.'/'.$item['name'];?>" onclick="DelFile(this)">删除</a>
            </td>
        </tr>
        <?php }?>

        <tr>
            <td colspan="6">
                <a href="javascript:history.go(-1)">后退</a>
                <a href="javascript:history.go(1)">前进</a>
                <a href="index.php">首页</a>
                <a href="javascript:void(0)" onclick="AddDir()">创建文件夹</a>
                <a href="javascript:void(0)" onclick="AddFile()">创建文件</a>
                <input type="file" name="photo" style="width:100px;height:30px;">
                 <!-- 多张上传 -->
                <input type="file" name="list[]" multiple />
                <button type="submit" style="width:100px;height:30px;">上传</button>
                <!-- 批量删除 -->
                <button type="submit" onclick="FileDeleteAll()" style="width: 100px;height:30px;">批量删除</button>
               
            </td>
        </tr>
    </table>
    </form>

</body>
</html>
<script src="./jquery.min.js"></script>
<script>
    //定义一个全局变量，用来记录所在路径
    var path = `<?php echo $path;?>`


    //创建文件夹
    function AddDir()
    {
        //弹出一个输入对话框
        var dirname = prompt('输入新的文件夹名称');

        // action(自定义的参数) 的作用 为了能够区分开多个提交动作
        //跳转界面
        if(dirname) location.href = `index.php?action=AddDir&path=${path}&dirname=${dirname}`
    }

    //重命名
    function EditDir(self)
    {
        //旧的文件夹名称
        var old = self.dataset.old

        //输入新的文件夹名称
        var dirname = prompt('请输入新的文件夹名称')

        //如果新的名称不为空 就跳转页面(刷新+传参)
        if(dirname) location.href = `index.php?action=EditDir&path=${path}&old=${old}&dirname=${dirname}`
    }

    //单个删除
    function DelDir(self)
    {
        //删除自定义属性
        var del = self.dataset.del
        
        //删除提醒  confirm 确认对话框 如果确认就返回true 否则返回false
        if(confirm("是否确认删除文件夹")) location.href = `index.php?action=DelDir&path=${path}&del=${del}`
    }
    //创建文件
    function AddFile()
    {
        //弹出一个输入对话框
        var filename = prompt('输入新的文件名称');
        // action(自定义的参数) 的作用 为了能够区分开多个提交动作

        //跳转界面
        if(filename) location.href = `index.php?action=AddFile&path=${path}&dirname=${filename}`
    }
    //修改文件
    function EditFile(self)
    {
        //旧的文件名称
        var old = self.dataset.old

        //输入新的文件名称
        var filename = prompt('请输入新的文件名称')

        //如果新的名称不为空 就跳转页面(刷新+传参)
        if(filename) location.href = `index.php?action=EditFile&path=${path}&old=${old}&dirname=${filename}`
    }
    //文件单个删除
    function DelFile(self)  
    {
        //删除自定义属性
        var del = self.dataset.del
        
        //删除提醒  confirm 确认对话框 如果确认就返回true 否则返回false
        if(confirm("是否确认删除文件夹")) location.href = `index.php?action=DelFile&path=${path}&del=${del}`
    }
// 编辑文件


    //全部删除
    function DelAll(self){
        var dir =self.dataset.dir;
        if(confirm("是否确认删除文件夹")) location.href = `index.php?action=DelAll&path=${path}&dir=${dir}`
    }
    var f =true;
    // console.log($("#cek").prop("checked",false))
    $("#cek").click(function(){

        if(f){
            //获取匹配元素的属性
            $(":checkbox").prop("checked",true);
            f=false
        }
        else{
            $(":checkbox").prop("checked",false);
            f =true;
        }
        
    })
    // jQ each 遍历
    $(":checkbox").click(function(){
        let fla=true;
        $(":checkbox").each(function(){
            fla = $(this).prop("checked") && fla;
        })
        if(fla){
            $("#cek").prop("checked",true);
            fla =true;
        }else{
            $("#cek").prop("checked",false);
            fla =false;

        }
    })
    // window.onchange =function(){
    //     // if(!f){
    //     //     //获取匹配元素的属性
    //     //     // $(":checkbox").prop("checked",false);
    //     //     // f=false
    //     // }
    // }
    //批量删除
    function FileDeleteAll()
    {  
        if(confirm("是否批量删除")){
            return true;
        }
        else{
            return false;
        }
    }
   

    
</script>